package daosimp;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Transaction;

import util1.HibernateUtil;
import modelo.Cursoperiodogrupo;
import modelo.Evaluacion;
import daos.EvaluacionDAO;

public class EvaluacionDAOIMP implements EvaluacionDAO {

	private Transaction tx;

	@Override
	public List<Evaluacion> obtenerEvaluacionesxCurso(Cursoperiodogrupo cpg) {
		List<Evaluacion> evaluaciones = new ArrayList<Evaluacion>();
		try {
			tx = HibernateUtil.session.beginTransaction();
			String hql = "FROM Evaluacion where cursoperiodogrupo= '"
					+ cpg.getIdCursoPeriodoGrupo() + "'";
			Query query = HibernateUtil.session.createQuery(hql);
			if (!query.list().isEmpty()) {
				evaluaciones = query.list();
			}
			tx.commit();
		} catch (Exception ex) {
			tx.rollback();
		}
		return evaluaciones;
	}

	@Override
	public List<Evaluacion> listarAllEvaluaciones() {
		List<Evaluacion> evaluaciones = new ArrayList<Evaluacion>();
		try {
			tx = HibernateUtil.session.beginTransaction();
			String hql = "FROM Evaluacion";
			Query query = HibernateUtil.session.createQuery(hql);
			if (!query.list().isEmpty()) {
				evaluaciones = query.list();
			}
			tx.commit();
		} catch (Exception ex) {
			tx.rollback();
		}
		return evaluaciones;
	}

	@Override
	public void registrarEvaluacion(Evaluacion evaluacion) {
		try {
			tx = HibernateUtil.session.beginTransaction();
			HibernateUtil.session.save(evaluacion);
			tx.commit();
		} catch (Exception ex) {
			tx.rollback();
			throw ex;
		}
	}

	@Override
	public void modificarEvaluacion(Evaluacion evaluacion) {
		try {
			tx = HibernateUtil.session.beginTransaction();
			HibernateUtil.session.update(evaluacion);
			tx.commit();
		} catch (Exception ex) {
			tx.rollback();
			throw ex;
		}
	}

	@Override
	public void eliminarEvaluacion(Evaluacion evaluacion) {
		try {
			tx = HibernateUtil.session.beginTransaction();
			HibernateUtil.session.delete(evaluacion);
			tx.commit();
		} catch (Exception ex) {
			tx.rollback();
			throw ex;
		}
	}

	@Override
	public Evaluacion obtenerEvaluacionxId(String e) {
		Evaluacion evaluacion = new Evaluacion();
		try {
			tx = HibernateUtil.session.beginTransaction();
			String hql = "FROM Evaluacion where evaluacionId='" + e + "'";
			Query query = HibernateUtil.session.createQuery(hql);
			if (!query.list().isEmpty()) {
				evaluacion = (Evaluacion) query.list().get(0);
			}
			tx.commit();
		} catch (Exception ex) {
			tx.rollback();
		}
		return evaluacion;
	}

	@Override
	public Evaluacion obtenerEvaluacionVigentexCurso(Cursoperiodogrupo cpg) {
		Evaluacion evaluacion = new Evaluacion();
		try {
			tx = HibernateUtil.session.beginTransaction();
			String hql = "FROM Evaluacion where cursoperiodogrupo='"
					+ cpg.getIdCursoPeriodoGrupo()
					+ "' and horaInicioEvaluacion<=CURRENT_DATE() and horaFinEvaluacion>=CURRENT_DATE()";
			Query query = HibernateUtil.session.createQuery(hql);
			if (!query.list().isEmpty()) {
				evaluacion = (Evaluacion) query.list().get(0);
			}
			tx.commit();
		} catch (Exception ex) {
			tx.rollback();
		}
		return evaluacion;
	}

}
